<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        
    </style>
</head>
<body>
    
</body>
<script>
    // 单例模式创建对象：单个实例，一个对象
    // const obj = {};
    // const obj2 = new Object();
    // obj2.name = "张三";
    // obj2.age = 18;
    // obj2.show = function(){}
    // console.log(obj2)

    // 工厂模式：对单例模式创建的对象进行抽象，抽象出类后，在类内，创建对象，对对象进行加工，并返回到外部
    // 原料，加工，出厂
    // 对单例模式创建的对象进行抽象，抽象出类，将类中的功能，抽象成规范

    const factory = (function(){
        // 规范：只被创建了一次，所以才能让所有通过当前类创建的实例的方法都是同一个
        const interface = {
            show:function(){
                console.log(this.name);
            }
        };
        // 类：会被多次执行，每次执行时都在使用同一个规范，添加相同的属性，但不同的值
        return function(n, a){
            const o = {};
            o.name = n;
            o.age = a;
            o.show = interface.show;
            return o;
        }
    })();

    const o1 = factory("张三",18);
    const o2 = factory("李四",20);
    const o3 = factory("王二",19);

    o1.show();
    o2.show();
    o3.show();

    console.log(o1);
    console.log(o2);
    console.log(o3);
    console.log(o2 === o1);
    
    console.log(o1.show === o2.show);
    console.log(o1.show === o3.show);
    console.log(o2.show === o3.show);

    // 以上工厂模式被抛弃了
    // 官方提供了内置的工厂模式




    






</script>
</html>